With the advent of the personal computer, there has been a steady proliferation in the variety of human interface devices (HIDs) that provide mechanisms for human users to provide input and receive output from computer programs executing on a host device. As the capabilities of the personal computer have advanced, so has the variety and sophistication in peripheral HIDs that are available to users. This has resulted in many different hardware and software interfaces for communicating between peripheral devices and a host device.
The set of software interfaces that are utilized by a host device in supporting communications with peripheral devices are typically organized as stacked layers of interfaces. Each layer in the stack is comprised of software programs that implement a particular aspect of the functionality required for the operation of the peripheral device by the host device. The bottom layers of the stack are software programs that interface the processor of the host device with hardware buses that are used to transmit signals to and from the peripheral devices. The top layers of the stack are software programs that provide an interface by which human users or other software programs can operate the peripheral devices.
When a new peripheral device is installed for use by a host device, part of that installation processes includes verifying whether the stack of the host device includes all software necessary to communicate with the new peripheral device. In many cases, this installation process requires at least some updates to the software stack to include device-specific software that is required to fully utilize the new peripheral device. Installing device-specific software does not always address all compatibility issues. In order for the host device to interface with the new peripheral device, the host device must support the low-level bus communication protocol that is required by the peripheral device. Support for a bus communication protocol by a host device usually requires a hardware-level bus implementation that is ideally implemented when the host device is designed and manufactured.
Early generations of peripheral HIDs, which included devices such as keyboards and mice, interfaced with the host device using serial ports. Many of these early, serial port HIDs communicated with the processor of the host device via a Low Pin Count (LPC) bus. Support for the LPC bus is typically implemented on the host device by dedicated pins on the host device processor. Other bus protocols can be similarly implemented at the hardware-level of the host device. Host devices manufacturers choose which bus-protocols to support at the hardware level, which dictates whether the host device will be compatible with certain peripheral devices.
As new types of peripheral HIDs have entered the marketplace, the LPC bus serial interface used by peripherals gave way to new peripheral device interfaces. However, the resulting growth in the number of proprietary interfaces used by peripheral HIDs became untenable for host device manufacturers to support. Largely in response to this quandary, a consortium of hardware and software manufactures developed the Universal Serial Bus (USB), which provides a standardized interface for peripherals devices to communicate with a host device. USB was quickly adopted throughout the industry and has further encouraged the proliferation in peripheral HIDs.
Despite the popularity of USB, the hardware interfaces and bus protocols utilized by peripheral devices have continued to evolve. New interfaces continue to be introduced and existing interfaces are adapted for use by new classes of peripherals. In some cases, only software updates are required to support a new interface. For instance, efforts to further standardize peripheral device communications have resulted in the new peripheral device interfaces. The HID-USB protocol standardizes HID communications using the USB protocol. The HID-I2C protocol similarly standardizes HID communications using the I2C protocol. As long as a host device includes hardware support for the USB and I2C bus protocols, the host device can support peripheral devices that utilize the HID-USB or HID-I2C protocols through updates to the host device's software stack.
In other cases, new peripheral interfaces will require hardware support by the host device. For instance, as sensors continue to be adopted as components of peripheral devices, new interfaces (such as I2C) are being used by this relatively new class of peripheral devices. eSPI is a new interface replacing LPC as a single host interface to the embedded controller (EC). As with other bus protocols, support for the eSPI bus is ideally implemented by dedicating processor pins of the host device to implement this eSPI bus, in addition to including the software necessary to implement the eSPI bus protocol.
Host device manufacturers must remain forward-looking in deciding whether to include hardware support for new bus protocols that are used by new classes of peripheral devices. Legacy peripheral devices place similar pressures on host device manufacturers. The need to continue to provide support for popular peripheral devices often compels host device manufacturers to continue supporting legacy hardware interfaces. Thus, host device manufacturers face pressure to include support for emerging bus protocols used by new peripheral devices while still maintaining support for legacy bus protocols. Furthermore, host device manufactures must remain adaptable in seamlessly supporting updates to existing bus protocols. Updates to the software interfaces available for use by a host device are relatively easy to accomplish when compared to updates to hardware-level interfaces. For instance, updating a class device driver to support new peripheral device functionality is relatively easy for a host device to support versus adding support for a new bus protocol, such as eSPI. Accordingly, there is a need for a host device that can utilize existing bus protocol hardware to support new bus protocols that would otherwise require additional hardware support by the host device.